class Observer:
    """
    抽象观察者类，定义了更新的接口方法update。
    具体的观察者类需要继承该类并实现update方法。
    """
    def update(self, subject_state):
        """
        当被观察对象的状态发生改变时被调用的方法。

        Args:
            subject_state: 被观察对象（主题）的当前状态。
        """
        pass


class Subject:
    """
    抽象主题类，管理观察者列表，并提供添加、删除观察者以及通知观察者的方法。
    具体的主题类需要继承该类并实现与具体业务相关的状态管理逻辑。
    """
    def __init__(self):
        self.observers = []

    def attach(self, observer):
        """
        将一个观察者添加到观察者列表中。

        Args:
            observer: 要添加的观察者对象。
        """
        self.observers.append(observer)

    def detach(self, observer):
        """
        从观察者列表中移除一个观察者。

        Args:
            observer: 要移除的观察者对象。
        """
        self.observers.remove(observer)

    def notify_observers(self, state):
        """
        遍历观察者列表，调用每个观察者的update方法，将当前主题的状态传递给它们。

        Args:
            state: 当前主题的状态。
        """
        for observer in self.observers:
            observer.update(state)


class ConcreteSubject(Subject):
    """
    具体的主题类，继承自Subject类。
    它维护一个内部状态，并在状态改变时通知所有的观察者。
    """
    def __init__(self):
        super().__init__()
        self.state = ""

    def change(self, state):
        """
        改变主题的状态，并通知所有的观察者。

        Args:
            state: 新的状态值。
        """
        self.state = state
        self.notify_observers(self.state)


class ConcreteObserver(Observer):
    """
    具体的观察者类，继承自Observer类。
    实现了update方法，用于在接收到主题状态更新通知时进行相应的处理。
    """
    def update(self, subject_state):
        """
        当接收到主题状态更新通知时，打印出主题的新状态。

        Args:
            subject_state: 主题的当前状态。
        """
        print("State updated to:", subject_state)


# 用法示例
if __name__ == "__main__":
    subject = ConcreteSubject()
    observer = ConcreteObserver()
    subject.attach(observer)
    subject.change("new state")


'''
代码实现：
State updated to: new state
'''